package br.gov.pe.seres.siap.business.implementation;

import java.util.List;
import br.com.banksystem.bsdemoiselle.business.expressao.implementation.BSExpressaoUnaria;
import br.com.banksystem.bsdemoiselle.business.expressao.implementation.BSTipoExpressao;
import br.com.banksystem.bsdemoiselle.business.filtro.BSFiltroGenerico;
import br.com.banksystem.bsdemoiselle.business.filtro.BSOrder;
import br.com.banksystem.bsdemoiselle.business.filtro.BSOrder.BSOrderTipo;
import br.com.banksystem.bsdemoiselle.business.implementation.BSGenericoBC;
import br.com.banksystem.bsdemoiselle.domain.IBSUsuario;
import br.com.banksystem.bsdemoiselle.exception.BSException;
import br.com.banksystem.bsdemoiselle.message.ErrorMessage;
import br.com.banksystem.bsdemoiselle.util.BSUtil;
import br.gov.frameworkdemoiselle.stereotype.BusinessController;
import br.gov.pe.seres.siap.bean.NOME_POJO;
import br.gov.pe.seres.siap.business.INOME_POJOBC;
import br.gov.pe.seres.siap.business.implementation.filtro.FiltroCorCabelos;
import br.gov.pe.seres.siap.business.implementation.filtro.FiltroNOME_POJO;
import br.gov.pe.seres.siap.persistence.INOME_POJODAO;
import br.gov.pe.seres.siap.util.Util;

@BusinessController
public class NOME_POJOBC extends BSGenericoBC<NOME_POJO, INOME_POJODAO> implements INOME_POJOBC {

	@Override
	protected void adicionarParametrosConsulta(BSFiltroGenerico<NOME_POJO> filtro) {
		((FiltroNOME_POJO) filtro).setCamposRetornados(FiltroNOME_POJO.DESCRICAO);
		if (BSUtil.isStringNaoNulaNaoVazia(filtro.getEntidadeConsulta().getDescricao())) {
			((FiltroNOME_POJO) filtro).addExpressao(new BSExpressaoUnaria(BSTipoExpressao.LIKE, FiltroNOME_POJO.DESCRICAO, filtro
					.getEntidadeConsulta().getDescricao()));
		}
		((FiltroNOME_POJO) filtro).addCampoOrdenado(new BSOrder(FiltroNOME_POJO.DESCRICAO, BSOrderTipo.ASC));
	}

	@Override
	protected void adicionarParametrosListar(BSFiltroGenerico<NOME_POJO> filtro) {
		filtro.addCampoOrdenado(new BSOrder(FiltroNOME_POJO.DESCRICAO));
	}

	@Override
	protected void resolverPreDependencias(NOME_POJO pojo, IBSUsuario usuario) {
		super.resolverPreDependencias(pojo, usuario);
		pojo.setDescricao(Util.capitalize(pojo.getDescricao()));
	}

	@Override
	protected void validarAlteracaoEntidade(NOME_POJO pojo, IBSUsuario usuario) {
		// TODO Auto-generated method stub

	}

	@Override
	protected void validarExclusaoEntidade(NOME_POJO pojo, IBSUsuario usuario) {
		// TODO Auto-generated method stub

	}

	@Override
	protected void validarInclusaoEntidade(NOME_POJO pojo, IBSUsuario usuario) {
		// TODO Auto-generated method stub

	}

	@Override
	protected void validarUnicidadeEntidade(NOME_POJO pojo, IBSUsuario usuario) {
		FiltroNOME_POJO filtro = new FiltroNOME_POJO();
		filtro.addExpressao(new BSExpressaoUnaria(BSTipoExpressao.EQUALS_IGNORECASE, FiltroNOME_POJO.DESCRICAO, pojo.getDescricao()));
		
		if (pojo.getId() != null) {
			filtro.addExpressao(new BSExpressaoUnaria(BSTipoExpressao.NOT_EQUALS, FiltroNOME_POJO.ID, pojo.getId()));
		}

		if (totalResultado(filtro) != 0) { throw new BSException(ErrorMessage.MSG_UNICIDADE, getPojoUtil()
				.getNomeClasse(NOME_POJO.class)); }
	}

}
